package productorconsumidorpetri;
import java.util.Random;

public class Productor extends Thread
{
    private Monitor monitor;
    /*
    private int [] disparo_producir = new int [4];
    private int [] disparo_ya_produci = new int [4];
    */
    private int disparo_producir = 2;
    private int disparo_ya_produci = 4;
    private Buffer buffer;
        
    // constructor
    public Productor (Monitor monitor, Buffer buffer)
    {
        this.monitor = monitor;
        this.buffer = buffer;
                
        /*
        //Se carga el valor del vector que servira para dispara la transicion de Consumir
            disparo_producir[0] = 0;//Si hay un uno se disparara la transicion Consumir
            disparo_producir[1] = 1;//Si hay un uno se disparara la transicion Producir
            disparo_producir[2] = 0;//Si hay un uno se disparara la transicion Ya_Consumi
            disparo_producir[3] = 0;//Si hay un uno se disparara la transicion Ya_Produci
            //Se carga el valor del vector que servira para dispara la transicion de Ya_Consumi
            disparo_ya_produci[0] = 0;//Si hay un uno se disparara la transicion Consumir
            disparo_ya_produci[1] = 0;//Si hay un uno se disparara la transicion Producir
            disparo_ya_produci[2] = 0;//Si hay un uno se disparara la transicion Ya_Consumi
            disparo_ya_produci[3] = 1;//Si hay un uno se disparara la transicion Ya_Produci
            */	
    }	   

    //Metodo run
    public void run()
    {	
        System.err.println( getName() + " SOY PRODUCTOR");
        
        //Cantidad que va a producir
        for (int cuenta = 1; cuenta <= 10; cuenta++ )
        {
            //Estar inactivo de 0 a 3 segundos
            try 
            {	Thread.sleep( ( int ) ( Math.random() * 30 ) );	}
            catch (InterruptedException e)
            {	e.printStackTrace();	}
			
            //Ejecutar la Red de Petri  
            monitor.ejecutar_transicion(disparo_producir);
            
            try 
            {	Thread.sleep( ( int ) ( Math.random() * 30 ) );	}
            catch (InterruptedException e)
            {	e.printStackTrace();	}
            
          //Producir
            int num_aleatorio = new Random().nextInt(99)+1;
            buffer.poner(num_aleatorio);
            System.out.println( getName() + " PRODUCI:"+num_aleatorio);	
		
            
          //Ejecutar la Red de Petri 
            monitor.ejecutar_transicion(disparo_ya_produci);

        }//Fin del bucle for
	
        System.err.println( getName() + " TERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINO DE PRODUCIR");
    }//Fin del metodo run
    
} //fin de la clase Productor